<?php
/**
 * Manejador de configuraciones
 *
 * @author 
 */
class configManager {

  static private $config = null;

  /**
   * Carga la configuracion del config.ini y la cachea (si esta habilitado)
   */
  private static function cargar_Configuracion() {
    //self::$config = @cacheManager::get("config");
    if (self::$config == null || self::$config == false) {
      if (empty($_SESSION["config"])) {
        $_SESSION["config"] = parse_ini_file($_SESSION["PATH"]."../config.ini", true);
        self::$config = $_SESSION["config"];
        if (self::$config["general"]["memcache"] == true) {
          cacheManager::connectToHost(self::$config["memcache"]["host"], self::$config["memcache"]["port"]);
          cacheManager::set("config", self::$config);
        }
      } else {
         self::$config = $_SESSION["config"];
      }
      
    }
  }

  /**
   *  Inicializa el config manager y lo carga en cache si esta habilitado
   */
  public static function init() {
    self::$config = parse_ini_file($_SESSION["PATH"]."../config.ini", true);
    $_SESSION["config"] = self::$config;
    if (self::$config["general"]["memcache"] == 1) {
      cacheManager::connectToHost(self::$config["memcache"]["host"], self::$config["memcache"]["port"]);
      cacheManager::set("config", self::$config);
    }
  }

  /**
   * Obtiene un array de configuracion del config.ini
   *
   * @param string $seccion nombre del array o seccion de configuracion
   * @param string $name nombre del parametro
   * @return mixed Array de configuraciones, valor del parametro o false
   */
  static public function obtener($seccion, $name ="") {
    self::cargar_Configuracion();
    $seccion = strtolower($seccion);
    $name = ($name != "") ? strtolower($name) : "";

    if (!isset(self::$config[$seccion]) || $seccion == "") {
      return false;
    } else {
      if (empty($name)) { //si pedimos solo una seccion
        return self::$config[$seccion];
      } else { //pedimos un parametro de una seccion
        if (!isset(self::$config[$seccion][$name])) { //si pedimos un parametro pero no existe
          return false;
        } else {
          return self::$config[$seccion][$name];
        }
      }
    }
  }

}
?>
